/**
  ******************************************************************************
  * @file    log-util.c
  * @author  dragonchern
  * @version V2.2.0
  * @date    09-15-2014
  * @brief   调试和记录日志
  ******************************************************************************
  * @attention
  *
  * <h2><center>&copy; COPYRIGHT 2013 上海今中网络科技有限公司 </center></h2>
  ******************************************************************************
  */

#ifndef __LOG_UTIL__H__
#define __LOG_UTIL__H__

#include "locker.h"
#include <sys/time.h>

extern  char *LogPath;

/// 日志路径
#define LOG_PATH            LogPath

/// 日志等级
#define LOG_FATAL			"FATAL   "		// 致命错误
#define LOG_ERROR			"ERROR   "		// 错误信息
#define LOG_WARNING			"WARNING "		// 警告信息
#define LOG_INFO			"INFO    "		// 正常输出信息
#define LOG_DEBUG			"DEBUG   "		// 调试信息

#ifdef  ENABLE_DEBUG
#define LOG(...)	        fprintf(stdout,      __VA_ARGS__)
#define LOG_STR(level, ...) LOG("%s: ", level); LOG(__VA_ARGS__); LOG("\n")
#define MSG_DEBUG(...)      do {LOG_STR(LOG_DEBUG, __VA_ARGS__); write_log(LOG_DEBUG, __VA_ARGS__);} while (0)
#else
#define LOG(...)            (void)0
#define LOG_STR(level, ...) (void)0
#define MSG_DEBUG(...)      (void)0
#endif

/// 记录日志和打印调试信息
#define MSG(level, ...)     do {LOG_STR(level, __VA_ARGS__); write_log(level, __VA_ARGS__);} while (0)

/// 断言参数合法
void assert_fail(char *expr, char *file, int line);
#define assert_param(expr)  ((expr) ? (void)0 : assert_fail(#expr, __FILE__, __LINE__))

/**
  * @brief  打开日志
  * @param  void
  * @retval 成功为TRUE，否则FALSE
  */
BOOL open_log();

/**
  * @brief		记录日志
  * @param		arg1:level  arg2：format
  * @retval		none
  */
void write_log(const char *level, const char *format, ...);

/**
  * @brief  关闭日志
  * @param  NULL
  * @retval void
  */
void close_log();

/**
  * @brief  移除日志
  * @param  NULL
  * @retval void
  */
void remove_log();

/**
  * @brief  清理大于3M的日志
  * @param  NULL
  * @retval void
  */
void clean_log();

#endif

/******************* (C) COPYRIGHT 2014 上海今中网络科技有限公司 *****END OF FILE****/


